package dados;

import org.junit.*;

public class EventoTest {

	@Test public void TestaConstrutor(){
		@SuppressWarnings("unused")
		Evento festa = null;
		try{
			festa = new Evento("rock in rio","10/10/2010","20:00",null,"festa boa");
		}catch(Exception e){
			Assert.assertEquals("erro no construtor","Os parametros tem que ser passados corretamente",e.getMessage());
		}
		try{
			festa = new Evento("rock in rio","10/10/2010","24:33","21:33","");
		}catch(Exception e){
			Assert.assertEquals("erro no construtor","horario invalido.",e.getMessage());
		}
		try{
			festa = new Evento("rock in rio","10/10/2010","23:33","01","");
		}catch(Exception e){
			Assert.assertEquals("erro no construtor","duracao invalida.",e.getMessage());
		}
		try{
			festa = new Evento("rock in rio","10/22","20:00","2","good party");
		}catch(Exception e){
			Assert.assertEquals("erro no construtor","formato de data invalido",e.getMessage());
		}
		try{
			festa = new Evento("rock in rio","10/10/2010","23:33","21:33","uhu");
		}catch(Exception e){
			Assert.fail();
		}

	}

	@Test public void TestaGetsSets(){
		Evento festa=null;
		try{
			festa = new Evento("rock in rio","10/10/2010","20:00","02:00","a festa tera uma duracao de 2 horas");
		}catch(Exception e){
			Assert.fail();
		}
		Assert.assertTrue(festa.getNome().equals("rock in rio"));
		Assert.assertFalse(festa.getNome().equals("nao quebra o teste"));
		Assert.assertTrue(festa.getHorario().equals("20:00"));
		Assert.assertTrue(festa.getDescricao().equals("a festa tera uma duracao de 2 horas"));
		festa.setDescricao("a festa sera no parque");
		Assert.assertFalse(festa.getDescricao().equals("a festa tera uma duracao de 2 horas"));
		
	}

	@Test public void testaComparacao(){
		Evento e1=null;
		Evento e2 = null;
		try{
			e1 = new Evento("Festa","12/10/2011","21:00","01:30","lol");
			e2 = new Evento("balada","15/10/2011","20:00","01:30","lol");
		}catch(Exception e){
			Assert.fail();
		}
		Assert.assertTrue(e1.compareTo(e2) < 0);
		e2.setData("15/09/2011");
		Assert.assertTrue(e1.compareTo(e2) > 0);
		e2.setData("12/10/2011");
		Assert.assertTrue(e1.compareTo(e2) > 0);
		e2.setHorario("21:30");
		Assert.assertTrue(e1.compareTo(e2) < 0);
		e2.setHorario("21:00");
		Assert.assertTrue(e1.compareTo(e2) == 0);
	}
	
	@Test public void testaConflitodeHorario(){
		Evento e1=null;
		Evento e2 = null;
		try{
			e1 = new Evento("Festa","12/10/2011","21:00","01:30","lol");//21:00 as 22:30 do dia 12
			e2 = new Evento("balada","12/10/2011","18:00","00:30","lol");//18:00 as 18:30 do dia 12
		}catch(Exception e){
			Assert.fail();
		}
		Assert.assertFalse(e1.temConflitoDeHorario(e2));
		e2.setHorario("23:00");
		Assert.assertFalse(e1.temConflitoDeHorario(e2));
		e1.setDuracao("06:00");//21:00 do dia 12 ate 03:00  do dia 13
		e2.setData("13/10/2011");
		e2.setHorario("02:00");// 2:00 a 2:30 de dia 13
		Assert.assertTrue(e1.temConflitoDeHorario(e2));
		e2.setData("14/10");
		Assert.assertFalse(e1.temConflitoDeHorario(e2));
		e2.setData("13/10/2011");
		e2.setHorario("03:00");//03:00 as 03:30 do dia 13, colado no final do outro evento
		Assert.assertFalse(e1.temConflitoDeHorario(e2));
		e2.setData("12/10/2011");
		e2.setHorario("20:00");
		e2.setDuracao("12:00");//20:00 do dia 12 as 08:00 do dia 13
		Assert.assertTrue(e1.temConflitoDeHorario(e2));
		e2.setData("31/12/2010");
		Assert.assertTrue(e1.compareTo(e2)>0);		
	}
	

}
